﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using LogicaNegocio;
using AccesoBD;
using System.Data.SqlClient;
using Reportes;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarAfiliacion : Form, IOpcion
    {
        private int nroAfTitular;
        private string opElegida;
        private bool res;
        private int hc;

        private Paciente pacienteBuscado;
        private int tipoDoc;
        private long nroDoc;
        private long nroHC;
        private Afiliacion afili;
        private bool tengoPaciente;

        bool bandera = true;

        int tipoDocContrato;
        long nroDocContrato;

        public frmRegistrarAfiliacion()
        {
            InitializeComponent();
            tengoPaciente = false;
        }

        public frmRegistrarAfiliacion(int tipoDoc, long nroDoc, long nroHC)
        {
            // TODO: Complete member initialization
            txtNumeroDocPaciente.Text = Convert.ToString(nroDoc);
            cmbTipoDoc.SelectedValue = tipoDoc;
            this.tipoDoc = tipoDoc;
            this.nroDoc = nroDoc;
            this.nroHC = nroHC;
            //this.hc = this.nroHC;
            InitializeComponent();
            
            tengoPaciente = true;

            cmbTipoDoc.SelectedIndex = -1;
            cmbTipoPlan.SelectedIndex = -1;
            cmbTipoDocTitular.SelectedIndex = -1;

        }

        private void frmRegistrarAfiliacion_Load(object sender, EventArgs e)
        {
            
            if (tengoPaciente)
            {
                cargarPaciente();
                panel1.Enabled = false;
            }
            else
            {
                panelTitular.Enabled = false;

                cargarcmbTipoDoc();
                cargarcmbPlanes();

                //lblResultadoBusAfiliad.Text = "";
            }
            mktFecha.Text = DateTime.Now.ToString();
            grdAfiliados.AllowUserToAddRows = false;
        }

        private void cargarPaciente()
        {
            txtNroDocumento.Enabled = false;
            cmbTipoDoc.Enabled = false;
            btnBuscarPaciente.Enabled = false;

            Pacientess pacientes = new Pacientess();
            Paciente p = new Paciente();
            string nombreDoc = pacientes.obtenerTipoDocumento(tipoDoc);
            p = pacientes.buscarPaciente(nroHC);
            txtNroDocumento.Text = nombreDoc + " " + nroDoc;
            txtNombrePaciente.Text = p.Apellido + " " + p.Nombre;
            mtbFechaNacimiento.Text = Convert.ToDateTime(p.FechaNacimiento.ToString()).ToShortDateString();
            if (p.Mail != null)
            {
                txtEmail.Text = p.Mail;
            }
            else
            {
                txtEmail.Text = "";
            }
            if (p.Telefono != null)
            {
                txtTelefono.Text = p.Telefono.ToString();
            }
            else
            {
                txtTelefono.Text = "";
            }            

        }

        private void rdbTitular_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbTitular.Checked)
            {
                panelTitular.Enabled = false;  //Deshabilito panel para busqueda de titular

            }
        }

        private void limpiarComponentes()
        {

            cmbTipoDocTitular.SelectedIndex = -1;
            cmbTipoPlan.SelectedIndex = -1;
            txtNumeroDocPaciente.Text = "";
            txtNombrePaciente.Text = "";
            txtNombrePaciente.Text = "";
            mtbFechaNacimiento.Text = "";
            txtEmail.Text = "";
            txtTelefono.Text = "";
            txtNumeroDocPaciente.Text = "";
            txtNroDocumento.Text = "";
            ckbEcco.Checked = false;
            txtNroDocTitular.Text = "";
            //lblResultadoBusAfiliad.Text = "";
            lblResulBusquedaTitular.Text = "";

        }

        private void rdbAdherente_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbAdherente.Checked)
            {
                panelTitular.Enabled = true;  //Habilito panel para busqueda de titular

                cargarcmbTipoDocTitular();
                cmbTipoDocTitular.SelectedItem = -1;

            }
        }


        public void setOpcion(string op)
        {
            opElegida = op;
        }

        public string getOpcion()
        {
            return opElegida;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();

        }


        private void cargarcmbTipoDoc()
        {
            GestorTiposDocumento g = new GestorTiposDocumento();
            List<TipoDocumento> lista = g.obtenerTipoDocumento();

            if (lista != null)
            {
                cmbTipoDoc.DataSource = lista;
                cmbTipoDoc.ValueMember = "Codigo";
                cmbTipoDoc.DisplayMember = "Nombre";


            }
        }
        private void cargarcmbTipoDocTitular()
        {
            GestorTiposDocumento g = new GestorTiposDocumento();
            List<TipoDocumento> lista = g.obtenerTipoDocumento();

            if (lista != null)
            {
                cmbTipoDocTitular.DataSource = lista;
                cmbTipoDocTitular.ValueMember = "Codigo";
                cmbTipoDocTitular.DisplayMember = "Nombre";


            }
        }

        private void cargarcmbPlanes()
        {
            PlanesAfiliaciones plan = new PlanesAfiliaciones();
            List<PlanAfiliacion> lista = plan.obtenerPlanes();

            if (lista != null)
            {
                cmbTipoPlan.DataSource = lista;
                cmbTipoPlan.ValueMember = "idPlan";
                cmbTipoPlan.DisplayMember = "nombre";


            }
        }

        //Aca va el metodo "buscar Paciente" ... 


        private void btnBuscarPaciente_Click(object sender, EventArgs e)
        {
            int codTipoDoc = Convert.ToInt32(cmbTipoDoc.SelectedValue);
            long nroDoc = Convert.ToInt64(txtNumeroDocPaciente.Text);
            Afiliaciones a = new Afiliaciones();
            if (a.verificarAfiliado(codTipoDoc, nroDoc))
            {
                MessageBox.Show("Este Paciente ya esta afiliado ! ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limpiarComponentes();
            }
            else
            {
                //string resultado = "Paciente encontrado";
                GestorDePaciente dp = new GestorDePaciente();
                GestorTiposDocumento gtd = new GestorTiposDocumento();
                TipoDocumento tipo = new TipoDocumento();

                pacienteBuscado = dp.VerificarExistenciaPaciente(nroDoc, codTipoDoc);
                tipo = gtd.obtenerTipodDocumentoXCod(codTipoDoc);

                if (pacienteBuscado != null)
                {
                    //lblResultadoBusAfiliad.Text = resultado;

                    nroDocContrato = pacienteBuscado.NroDocumento;
                    tipoDocContrato = pacienteBuscado.CodTipoDoc;

                    txtNroDocumento.Text = tipo.Nombre + " " + pacienteBuscado.NroDocumento; //Cambio
                    if (pacienteBuscado.Telefono != null)
                        txtTelefono.Text = Convert.ToString(pacienteBuscado.Telefono);
                    if (pacienteBuscado.Mail != null)
                        txtEmail.Text = pacienteBuscado.Mail;
                    mtbFechaNacimiento.Text = Convert.ToString(pacienteBuscado.FechaNacimiento);
                    txtNombrePaciente.Text = pacienteBuscado.Apellido + " " + pacienteBuscado.Nombre;


                }
                else
                {
                    MessageBox.Show("No se encontro paciente ! ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limpiarComponentes();
                }
            }


        }

        //Este metodo busca el titular... busca el nroDeAfiliado para dsp usarlo al crear un adherente!
        private void btnBuscarTitular_Click(object sender, EventArgs e)
        {
            Afiliados af = new Afiliados();
            afili = new Afiliacion();
            long nro = Convert.ToInt64(txtNroDocTitular.Text);
            int tipo= Convert.ToInt32(cmbTipoDocTitular.SelectedValue);

            afili = af.BuscarNroAfiliadoTitularEidPlan(nro, tipo);
            if (afili != null)
            {
                if (afili.nroAfiliadoTitular == null)
                {
                    String datosTitular = af.datosAfiliadoTitutlar();
                    MessageBox.Show("Se encontro titular: " + datosTitular, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //cmbTipoDocTitular.SelectedIndex = -1;
                    //txtNroDocTitular.Text = "";
                    ckbEcco.Enabled = false;
                    cmbTipoPlan.Enabled = false;
                }
                else
                {
                    MessageBox.Show("No se encontro el titular ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cmbTipoDocTitular.SelectedIndex = -1;
                    txtNroDocTitular.Text = "";

                }
            }
            else
            {
                MessageBox.Show("No esta registrado como paciente ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                cmbTipoDocTitular.SelectedIndex = -1;
                txtNroDocTitular.Text = "";
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {

            if (grdAfiliados.Rows.Count > 0)
            {
                MessageBox.Show("Afiliación registrada con éxito ! ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                frmVisorContrato formContrato = new frmVisorContrato();
                Afiliaciones a = new Afiliaciones();
                int nroAfiliado = a.nroAfiliacion(tipoDocContrato, nroDocContrato);
                formContrato.NroAfiliado = nroAfiliado;
                formContrato.Show();
                limpiarComponentes();
                grdAfiliados.Rows.Clear();
            }

        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            bool ecco;
            bool adhe;

            DateTime fecha = DateTime.Now;
            int tipoDoc = pacienteBuscado.CodTipoDoc;
            long nroDoc = pacienteBuscado.NroDocumento;
            string nombre = pacienteBuscado.Nombre;
            string apellido = pacienteBuscado.Apellido;
            DateTime fechaNac = Convert.ToDateTime(mtbFechaNacimiento.Text);

            //validamos si son null
            long? tel = null;
            if (!(string.IsNullOrEmpty(txtTelefono.Text)))
                tel = Convert.ToInt64(txtTelefono.Text);

            string email = null;
            if (!(string.IsNullOrEmpty(txtEmail.Text)))
                email = txtEmail.Text;

            int plan = Convert.ToInt32(cmbTipoPlan.SelectedValue);

            try
            {
                Afiliaciones af = new Afiliaciones();
                if (rdbTitular.Checked)
                {
                    if (ckbEcco.Checked) //Afiliado titular y solicita Ecco
                    {
                        ecco = true;
                        adhe = false;
                        af.registrarAfiliado(fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                        af.registrarAfiliacionTitular(plan, adhe, ecco, fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                    }
                    else //Afiliado titular sin Ecco
                    {
                        ecco = false;
                        adhe = false;
                        af.registrarAfiliado(fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                        af.registrarAfiliacionTitular(plan, adhe, ecco, fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                    }
                }
                else
                {
                    if (rdbAdherente.Checked) //Afiliado Adherente con Ecco
                    {
                        int nroTit;
                        int idPlan;
                        nroTit= Convert.ToInt32(afili.nroAfiliadoTitular);
                        idPlan = Convert.ToInt32(afili.idPlan);
                        if (ckbEcco.Checked)
                        {
                            ecco = true;
                            adhe = true;
                            af.registrarAfiliado(fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                            af.registrarAfiliacionAdherente(idPlan, adhe, nroTit, ecco, fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                        }

                        else    //Afiliado Adherente sin Ecco
                        {
                            ecco = false;
                            adhe = true;
                            af.registrarAfiliado(fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                            af.registrarAfiliacionAdherente(idPlan, adhe, nroTit, ecco, fecha, pacienteBuscado.nroHC, pacienteBuscado.idPersona);
                        }
                    }
                    else
                    {
                        //VEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEER!!!!!!!!!!!!!!!!
                        //if (rdbTitular.Checked == false && rdbAdherente.Checked == false)
                        //{
                        //    MessageBox.Show("Seleccione tipo afiliado ! ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //}
                    }
                    
                }
                
                panelTitular.Enabled = false;

                if (rdbTitular.Checked)
                {
                    grdAfiliados.Rows.Add(txtNombrePaciente.Text, txtNroDocumento.Text, "TITULAR");
                    bandera = false;

                }
                else
                {
                    if (bandera == true)
                    {
                        GestorDePaciente gp = new GestorDePaciente();
                        Paciente p = new Paciente();
                        Pacientess ps = new Pacientess();
                        p = gp.VerificarExistenciaPaciente(long.Parse(txtNroDocTitular.Text), Convert.ToInt32(cmbTipoDocTitular.SelectedValue));
                        string nom = p.Apellido + " " + p.Nombre;
                        string doc = ps.obtenerTipoDocumento(Convert.ToInt32(cmbTipoDocTitular.SelectedValue)) + " " + p.NroDocumento;
                        grdAfiliados.Rows.Add(nom, doc, "TITULAR");
                        grdAfiliados.Rows.Add(txtNombrePaciente.Text, txtNroDocumento.Text, "ADHERENTE");
                        bandera = false;
                        rdbTitular.Enabled = false;
                    }
                    else
                    {
                        grdAfiliados.Rows.Add(txtNombrePaciente.Text, txtNroDocumento.Text, "ADHERENTE");
                        rdbTitular.Enabled = false;
                    }

                }
                limpiarComponentes();
            }

            catch (Exception ex)
            {
                throw new Exception("No se pudo registrar afiliación !", ex);
            }

        }

        //private void button1_Click(object sender, EventArgs e)
        //{
        //    frmVisorContrato formContrato = new frmVisorContrato();
        //    formContrato.NroAfiliado = nroAfTitular;
        //    formContrato.Show();
        //}      

       
    }
}
